package com.hadluo.qq.server.controller;

import com.hadluo.qq.server.service.FriendshipService;
import com.hadluo.qq.server.vo.Result;
import com.hadluo.qq.server.vo.AddFriendRequest;
import com.hadluo.qq.server.vo.FriendVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * 好友关系控制器
 * @author hadluo
 */
@RestController
@RequestMapping("/api/friend")
public class FriendshipController {
    @Autowired
    private FriendshipService friendshipService;

    /**
     * 添加好友
     * @param request 添加好友请求
     * @return 添加结果
     */
    @PostMapping("/add")
    public Result<Void> addFriend(@RequestBody AddFriendRequest request) {
        if (request.getQqNumber() == null || request.getFriendQQNumber() == null) {
            return Result.error("QQ号不能为空");
        }

        // 不能添加自己为好友
        if (request.getQqNumber().equals(request.getFriendQQNumber())) {
            return Result.error("不能添加自己为好友");
        }

        boolean success = friendshipService.addFriend(request.getQqNumber(), request.getFriendQQNumber());
        if (success) {
            return Result.success("好友请求已发送");
        } else {
            return Result.error("添加好友失败，可能是用户不存在或已经是好友关系");
        }
    }

    /**
     * 获取好友列表
     * @param qqNumber 用户QQ号
     * @return 好友列表
     */
    @GetMapping("/list")
    public Result<List<FriendVO>> getFriendList(@RequestParam String qqNumber) {
        if (qqNumber == null || qqNumber.trim().isEmpty()) {
            return Result.error("QQ号不能为空");
        }

        List<FriendVO> friendList = friendshipService.getFriendList(qqNumber);
        return Result.success("",friendList);
    }

    /**
     * 获取好友详细信息
     * @param userQQNumber 用户QQ号
     * @param friendQQNumber 好友QQ号
     * @return 好友详细信息
     */
    @GetMapping("/detail")
    public Result<FriendVO> getFriendDetail(@RequestParam String userQQNumber, @RequestParam String friendQQNumber) {
        if (userQQNumber == null || userQQNumber.trim().isEmpty() ||
                friendQQNumber == null || friendQQNumber.trim().isEmpty()) {
            return Result.error("QQ号不能为空");
        }

        FriendVO friendDetail = friendshipService.getFriendDetail(userQQNumber, friendQQNumber);
        if (friendDetail == null) {
            return Result.error("获取好友信息失败，可能不是好友关系");
        }
        return Result.success("",friendDetail);
    }

    /**
     * 删除好友
     * @param userQQNumber 用户QQ号
     * @param friendQQNumber 好友QQ号
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    public Result<Void> deleteFriend(@RequestParam String userQQNumber, @RequestParam String friendQQNumber) {
        if (userQQNumber == null || userQQNumber.trim().isEmpty() ||
                friendQQNumber == null || friendQQNumber.trim().isEmpty()) {
            return Result.error("QQ号不能为空");
        }

        boolean success = friendshipService.deleteFriend(userQQNumber, friendQQNumber);
        if (success) {
            return Result.success("删除好友成功");
        } else {
            return Result.error("删除好友失败，可能不是好友关系");
        }
    }
}